package cn.iocoder.yudao.module.system.controller.admin.gugu.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * 直接参数请求 VO - 根据省份、选科、高考分数、位次获取冲稳保数据
 */
@Schema(description = "直接参数请求 VO - 根据省份、选科、高考分数、位次获取冲稳保数据")
@Data
public class DirectParamsReqVO {

    @Schema(description = "省份", requiredMode = Schema.RequiredMode.REQUIRED, example = "北京")
    @NotBlank(message = "省份不能为空")
    private String province;

    @Schema(description = "选科", requiredMode = Schema.RequiredMode.REQUIRED, example = "[\"物理\", \"化学\", \"生物\"]")
    @NotNull(message = "选科不能为空")
    private List<String> subjects;

    @Schema(description = "高考分数", requiredMode = Schema.RequiredMode.REQUIRED, example = "650")
    @NotNull(message = "高考分数不能为空")
    private Integer totalScore;

    @Schema(description = "位次", example = "5000")
    private Integer ranking;

    @Schema(description = "年份", example = "2024")
    private Integer year;

    @Schema(description = "性别", example = "男")
    private String gender;

    @Schema(description = "最低分数", example = "600")
    private Integer minScore;

    @Schema(description = "最高分数", example = "700")
    private Integer maxScore;

    @Schema(description = "感兴趣的专业类别", example = "[\"计算机\", \"软件工程\"]")
    private List<String> interestedMajorCategories;

    @Schema(description = "期望学校所在地", example = "北京")
    private String preferredLocation;

    @Schema(description = "用户类型，如物理类、历史类等", example = "物理类")
    private String typeName;

    @Schema(description = "分组类型：school-按学校分组，major-按专业分组，none-不分组（默认）。" +
            "按学校分组时将专业按学校进行分组展示；按专业分组时将学校按专业进行分组展示；" +
            "不分组时返回传统的冲稳保三个列表格式",
            example = "none",
            allowableValues = {"school", "major", "none"})
    private String groupType;

    @Schema(description = "页码（仅在分组查询时使用），从1开始。不分组查询时此参数无效",
            example = "1",
            minimum = "1")
    private Integer pageNo;

    @Schema(description = "每页数据量（仅在分组查询时使用），建议10-50之间。不分组查询时此参数无效",
            example = "10",
            minimum = "1",
            maximum = "100")
    private Integer pageSize;

    @Schema(description = "要返回的等级类型，支持多选。不传或传空数组时默认只返回冲刺等级数据。" +
            "可选值：rush-冲刺，stable-稳妥，safe-保底",
            example = "[\"rush\"]",
            allowableValues = {"rush", "stable", "safe"})
    private List<String> levelTypes;

    @Schema(description = "是否返回详细专业数据。在按学校分组时，设置为true才返回每个学校的具体专业列表，" +
            "默认为false只返回专业统计信息，以提升响应速度",
            example = "false")
    private Boolean includeMajorDetails;

    @Schema(description = "指定学校UUID，当需要获取特定学校的专业详情时使用。" +
            "配合includeMajorDetails=true使用，可以只获取指定学校的专业数据",
            example = "uuid-123")
    private String targetSchoolUuid;

    @Schema(description = "录取批次，用于筛选特定批次的专业。" +
            "可选值包括：本科一批、本科二批、本科提前批、专科批等",
            example = "本科一批")
    private String batchName;

    @Schema(description = "学校名称，支持模糊搜索。可输入学校名称的关键字进行筛选",
            example = "清华大学")
    private String schoolName;

    @Schema(description = "院校特色，支持多选。用于筛选具有特定标识的院校",
            example = "[\"985\", \"211\", \"双一流\"]",
            allowableValues = {"985", "211", "双一流", "教育部直属", "中央部委", "强基计划"})
    private List<String> schoolFeatures;

    @Schema(description = "办学性质，支持多选。用于筛选不同办学性质的院校",
            example = "[\"公办\", \"民办\"]",
            allowableValues = {"公办", "民办", "中外合作", "内地与港澳台地区合作办学"})
    private List<String> schoolProperties;

    @Schema(description = "大学类型，支持多选。用于筛选不同类型的院校",
            example = "[\"综合\", \"理工\"]",
            allowableValues = {"综合", "理工", "农林", "医药", "语言", "财经", "政法", "师范", "艺术", "民族", "体育"})
    private List<String> schoolTypes;
}
